#pragma once
#include <semaphore.h>


class sem
{
public:
    sem(const int& value)
    {                   //0: 线程间共享, 非0: 进程间共享
        sem_init(&_sem, 0, value);
    }
    
    //PV操作是[原子的]
    //申请信号量: 信号量>0(sem--, 并返回), =0(线程阻塞)
    int P()//pass
    {
        return sem_wait(&_sem);
    }

    //释放信号量: 唤醒一个在该sem下等待的线程
    int V()//vrijgeven
    {
        return sem_post(&_sem);
    }

    ~sem()
    {
        sem_destroy(&_sem);
    }

private:
    sem_t _sem;
};